VsyncPatch

ΉOS
mFρFWindows XP SP2 32bit
ΉFNTnAPIgpĂ邽߁A95/98/Me͓s\
񍐗LFXP64bitAVista32bit

ΉQ[
g ver1.02h
dX ver1.00b
i鏴 ver1.00d
ԉf ver1.50a
Ԓ ver1.02a
_^ ver1.00a
   ver1.00a (webzz)
na ver1.00a
@D ver1.00b

x
{pb`́AQ[̓啝ɕύX܂
{pb`𓖂Ăƕsł邩܂
sOscore.datobNAbv邱Ƃ𐄏܂
܂A\ɓmFłgp
ɖ{pb`gpԂŃvCۑAJ͂ӂ
{pb`Kp̃vCɊւẮAProjectXRA{[hɓe邱Ƃ͂ł܂
vCwebuploderŌJꍇ́AVsyncPatchgpĂ邱Ƃ𖾋LƁA
guɂȂɂƎv܂
{pb`͔ɍ쐬̂ł
ɖ₢킹Ȃ悤ɂ肢܂


{pb`gp邱ƂɂACPUgp100%ɂȂ錻ۂł܂
g̏ꍇAɂāA58fps62fpsŌŒ肳Ă܂ۂł܂
dX̏ꍇA_100_𒴂ƕ\Ȃ܂ACł܂
_^̏ꍇAwindow[h50fpsɂȂ肷錻ۂł܂
_^̏ꍇAmɐ邽ߒx邱Ƃ܂Ał܂
vCĐƂAskip{^ƍĐł܂
ĂA͒xȂ邱Ƃł܂
ᐫ\PCŐOFF̏ԂŃvCƁA
e\鍂ׂ̏ʂɂāA\Ƃ܂A
ɘa邱Ƃł܂
Q[60fpsȊOŁAႦ120fpsŕϑԃvCł܂(v\PC)

Ĕzz
RɍĔzzĂĂ܂܂
Azip̃t@CύXEǉ
̂܂܂̏ԂōĔzz肢܂

t@C
vpatch.exe
dll𓌕.exeɃCWFNV邽߂̎st@C
vC͂̎st@CsĂ
vpatch.exéA.exẽt@Cêł͂܂
{pb`KpԂœvĆA
Kvpatch.exesKv܂

vpatch_th??.dll
eV[Yp̃pb`{
dllvpatch.exeɂăQ[LoadA
̎sR[h܂


CXg[
vpatch.exeAvpatch_th??.dllAvpatch.inĩt@C
V[YCXg[tH_ɃRs[Ă
init@C͖Ăꉞ삵܂

g̏ꍇvpatch.exevpatch_th06.dllvpatch.ini
dX̏ꍇvpatch.exevpatch_th07.dllvpatch.ini
i鏴̏ꍇvpatch.exevpatch_th08.dllvpatch.ini
ԉf˂̏ꍇvpatch.exevpatch_th09.dllvpatch.ini
Ԓ̏ꍇvpatch.exevpatch_th095.dllvpatch.ini
_^̏ꍇvpatch.exevpatch_th10.dllvpatch.ini
nȁꍇvpatch.exevpatch_th11.dllvpatch.ini
@D̏ꍇvpatch.exevpatch_th12.dllvpatch.ini
̏ꍇvpatch.exevpatch_alcostg.dllvpatch.ini

pb`̓sǂŁAscore.datȂ\邩܂
Ô߃obNAbvƂĂpb`s悤ɂĂ
܂A{c[ォ̓Q[version`FbNĂȂ̂ŁA
ΉĂ邩ǂmFĂ
vpatch.exéAvpatchƂ̂dll𓯂tH_ŌA
ŏɌdll[h܂
āAtH_ɕʂvpatch dllƁA܂Nł܂
V[YCXg[tH_ɂ́A
ΉĂdll݂̂悤ɂĂ

ACXg[
CXg[ɃRs[exedllyinit@C폜Ă
܂AQ[́uȂvݒɃ`FbNĂ̂ŁA
ONɂăvCꍇ́A
custom.exeNuȂvݒ̃`FbNĂ

NIvV
vpatch.exeNہAR}hCŁA[hinit@Cw肷邱Ƃł܂
init@CPath́APathłPathłt@Ĉ݂ł܂܂
t@CƁAvpatch.exeƓtH_ɂinit@Cǂݍ܂܂
F
vpatch.exȇ݂tH_ C:\Program Files\TH\kouma\ ̏ꍇ
vpatch.exe "C:\Program Files\TH\vpatch_120fps.ini"
@C:\Program Files\TH\vpatch_120fps.ini ǂݍ܂܂
vpatch.exe ini\vpatch_120fps.ini
@C:\Program Files\TH\kouma\ini\vpatch_120fps.ini ǂݍ܂܂
vpatch.exe vpatch_120fps.ini
@C:\Program Files\TH\kouma\vpatch_120fps.ini ǂݍ܂܂

ӎ
custom.exe
@Window[hA`Ԋu=
L̐ݒœmF܂
̐ݒȊOł܂삷邩ǂ͂킩܂
{pb`NƁAQ[́uȂvݒ肪IONɂ܂
`Ԋu=AȊOɂƁAQ[x{邱Ƃ܂
\ȂłAȊO͔ΉƂƂł肢܂

init@C
[Window]
AskWindowMode = 0ȊOw肷Window or FullScreenIł_CAONɕ\܂
enabled = 0ȊOȂ牺LWindowݒLɂ܂(Window[hWindowTCYʒuύXł܂)
X = ʂXWw
Y = ʂYWw
Width = Q[ʂ̕ݒ(default:640)
Height = ݒ(default:480)
TitleBar = 0w肷ƃ^Cgo[ăQ[ʂ݂̂ɂ܂
AlwaysOnTop = 0ȊOw肷ƏɎOɕ\܂

[Option]
Vsync (ftHg=0)
@naƐ@DɂẮAcustom.exe"͂̃CeV"̐ݒ肪D悳܂
@Vsync=1AVsync=0Ƃē삵܂

@0w肷ƐɁA`s܂

@1w肷ƓƎ̕@ŐƂA`s܂
@Gamȇx(fps)́AtbV[gƓɂȂ܂

@2w肷ƁAAGameFPSɐݒ肳ꂽfpsŕ`s܂
@tbV[g60HzȊOł60fps(GameFPS)ɋ߂[gŕ`悪\łA
@ϓȃ[gŉʂXVłȂ߁Aëړ炩ɕ`łȂ\܂
@CalcFPS=0ɂĂꍇ́Afps\sɂȂ邱Ƃ܂(59fps`61fpsӂӂ)
@CalcFPS=1̏ꍇłAsɂȂ邱Ƃ܂Aľܓɂ60fpsɂȂƎv܂

@3w肷ƁAʂ̒ɗƂɕ`s܂
@Gamȇx(fps)́AtbV[gƓɂȂ܂
@Kʂ̒t߂ŃeBAON悤ɂȂ܂A
@Vsync=1̎ƔׂāAʂ̗̉̈̕`x8msxȂȂ܂(60Hz)
@ɉʉŃL𑀍삷lł
@ʏ㔼8ms`16msx̕`xN܂
@Ȃ݂Vsync=1̎́Aʏ㔼0`8msx̕`xAʉ8ms`16msx̕`xN܂
@Vsync=0̕`x́A`^C~Oŝ߁A`xs(0`16ms)ł

@fBXvC̑́Aʂ̏[牺[֌Ă܂
@[܂ő̂ɂ鎞Ԃ́A640x480 60HzŁA悻15~bł
@܂AfBXvCɉ摜Sɕ\܂ł16ms߂킯łA
@fBXvCɕ\ꂽ_Ŋ1t[(16ms)xĂƂƂł
@܂Aォ牺֑邽߁A֍sقǒx傫ł

@vpatchł́AvsynconɂoffɂAvCɕ\鏈͒ႭȂX܂
@vsync onł́A̎ɍ킹ĕ`^C~O𒲐KvAǂĂt[܂
@vsync offł́At[V[łAɍő̃^C~Oŕ`悪s悤ɂĂ܂
@XybN}Vłvsync off߂܂
@vpatchgp̏ꍇ́AR[h̃ASYAcustom.exevsync offɂĂA
@ő̃^C~Oł͕`悳ȂƂAvsync onƂ܂ςȂ܂

@vsync off̃eBAOɗ͗}ɂ́AfBXvC̃tbV[g85HzɂƗǂł傤
@t[ƂɑSႤꏊŃeBAON邽߁AlɂĂ̓eBAOSȂȂ܂

@Vsync=1̐́A{Ƃ̐Ƃ͈ႢA͒x͂قƂǂ܂
@ʂɎ̃t[`悵ĂŒɐA(VBlank)߂ꍇ́A
@ɂɕ`悵܂
@܂Ȁꍇ̓eBAO܂Axɕ`悪\ł
@Vsync=1ɂꍇ́Aj^̃tbV[g60HzɂKv܂
@PCɂA҂60.00fpsŕ`łȂ\܂
@(59.75fps60.10fps肵܂)
@͑̑x҂60.00Hzł͂ȂƂƂł(dlł)

@Vsync=0ɂāA60.00fpsGame삵Ă鎞ɁA
@eBAOĂLineAォɔɏĂ̂
@ڂŊmFłƎv܂
@eBAOĂLineASӏŋNĂȂ΁A
@̑x͂҂60.00HzƂƂł
@eBAOĂLineAɈړĂȂȂx
@60.00Hzxł
@tɁAɈړĂȂA60.00HzƂƂł
@60.00Hz҂̊́AقƂǂȂƎv܂

@PCɂĂ̓tbV[g60Hzɐݒ肵ĂA
@ۂɂ75fpsɂȂ邱Ƃ܂
@OtBbNhCo ForceWare 94.24 ɂāǍۂmFĂ܂
@GeForce/ION Driver 186.18 ł́A薳ł
@GeForce6EGeForce7̐hCover̂ЂƂ94.24܂܂Ă邽߁A
@94.24gpĂ͑܂ Ӊ
@tbV[gݒ肪܂łȂver94.24ȊOɂ邩܂
@94.24́AEñ^CgʂŉʂoO錻ۂ܂ɋN܂

@VGAfoCX̓ǂݎT|[gĂȂꍇ́A
@Vsync@\͎IOFFɂȂ܂


SleepType (ftHg=1)
@FPSɂ邩ǂ̐ݒł
@0̏ꍇ́ASleepAシɕ`悷悤ɂ܂
@0w肷PCɂĂFPS\Ȃӂ܂ACPUׂ͂ȂႢł
@1ɂƁASleep鎞1~bȂA
@SleepAA`掞𒲍āA`掞҂ɕ`悷悤ɂ܂
@-1ɂƁASleep̐x𒲍āAx̏ꍇSleepType0ɂ܂
@ᐸx̏ꍇ́ASleepType1ɂ܂
@ʏ1ɂĂ
@ǂĂᕉׂœ삳Kvꍇ0ݒ肵Ă
@SleepType=0ɂꍇ́AVsync=1ɂꍇAvsyncłȂ\܂

BltPrepareTime (ftHg=4)
@ۂɉʂɕ\鉽~bOɁA
@ʂɎ̃t[`悵n߂邩w肵܂
@0`16̐w肵Ă
@傫قǓ͒x܂A
@ʂ̒e鍂ׂȏԂł炩ɕ\ł܂
@PCȂ4`6xAᑬPCȂ10xw肵Ă
@`悪炩ɂȂȂꍇ́A1₵ăeXgĂ
@͒xꍇ́A1炵ăeXgĂ
@Vsync=1ɂꍇ́ABltPrepareTime0傫lݒ肵Ă
@0ɂƕKeBAO܂
@BltPrepareTime=0ɂƁAʂɕ`Aɕ\ʂɓ]܂A
@ʂɕ`悷鎞Ԃe̗ʂɂĂ܂܂Ȃ߁A
@Ɉ̕`Ԋuŕ\łAʁA₷Ȃ܂
@(ɒᐫ\PCł傫Ȃ܂)
@AutoBltPrepareTime=1̏ꍇ́ABltPrepareTime̐ݒ͖܂
@BltPrepareTime̐ݒLɂꍇ́AKAutoBltPrepareTime=0ɂKv܂
@BltPrepareTime=-1ɂꍇ́AIAutoBltPrepareTime=1ݒ肳܂

AutoBltPrepareTime (ftHg=1)
@0w肵ꍇ́A܂
@1ȏw肷ƁA`抮Ԃ̓vAœKBltPrepareTimeŃZbg܂
@ŎZoBltPrepareTiméAɏȂ߂ɎZo܂
@AutoBltPrepareTime1ȏɂƁA̒l̃~bAZoꂽlɉZ܂
@vsync܂łȂꍇ́A2`4xɂƁA܂܂
@vsync܂łȂꍇ́ALockBackBuffer=1̐ݒĂ
@AutoBltPrepareTime1ɂƁABltPrepareTime̐ݒ͖܂
@BltPrepareTime=-1ɂꍇ́AAutoBltPrepareTime̐ݒ͖܂

AllowShortDelay (ftHg=0)
@0w肵ꍇ́A܂
@1w肷ƁAdV[ŕ`掞Ԃ߂ĂAZx͒x̂ƂĈ܂
@1w肵ꍇ́AϓIȃt[[g荂ێ邱Ƃł܂A
@pŁAx߂ۂɁAꎞIɃt[[g߂邽߁A
@邩܂
@炵ꍇ́AAllowShortDelay=1ɂĂ
@GameFPS(Ⴆ120fps)ŃvCꍇAAllowShortDelay=1ɂƈ肵₷ł

GameFPS (ftHg=60)
@Q[FPSw肵܂
@ʏ60w肵Ă
@60̐l͎wł܂
@Vsync=1̏ꍇ́Aj^̃tbV[gƓFPSɂȂA
@GameFPS͖܂

ReplaySkipFPS (ftHg=240)
@vCĐĂƂskip{^ƁA
@ReplaySkipFPS̃[gōĐł܂
@̃IvV́A`悷鑬xύX邾ł
@Direct3D߂̌ĂяoȗēϐύXăt[΂A
@Ƃ킯ł͂܂
@FPSݒ肵ĂAᐫ\PCł́Ã[g܂ŏoȂ\܂
@ΉQ[FgAdXAi鏴Aԉf

ReplaySlowFPS (ftHg=30)
@vCĐĂƂslow{^ƁA
@ReplaySlowFPS̃[gōĐł܂
@ϑԂ̃vC鎞ɖɗ܂
@ΉQ[FgAdXAi鏴AԉfˁA_^A

CalcFPS (ftHg=1)
@0ȊOw肷ƁAQ[ŕ\FPS\AƎ@ŎZo悤ɂ܂
@dXFPS\ꍇ́A1w肷ƉP܂
@GameFPS60ȊOɂĂꍇ́A1w肵ȂFPS\ςɂȂ邩܂
@Ȃ萳mFPS\łƎv܂̂ŁACalcFPS=1𐄏܂
@Vsync=1ɂĂꍇ́A҂60.00FPSɂ͂ȂȂƎv܂

AlwaysBlt (ftHg=0)
@custom.exe"EBhEX^C""EBhE"p̐ݒł(Window[hp̐ݒł)
@1ɂƁAQ[WindowANeBułAɕ`s悤ɂ܂
@1ɂƁAQ[Window̃tH[JX͂ꍇɁA
@L[͂ςȂɂȂ錻ۓC邽߂ɁA
@Game̓͏R[hC܂
@keyboard͂́AQ[WindowANeBu̎̂ݔ܂
@custom.exéu͂DirectInputgpȂv̍ڂ́A`FbNĂȂĂ肠܂
@ΉQ[FgAdX

BugFixGetDeviceState (ftHg=1)
@̍ڂ͏iniɂ݂͑܂@蓮ŒǉĂ
@0w肵ꍇ́A܂
@1ɂƁA
@obNOEh߂ƁA͂܂܂ɂȂ\邱Ƃ錏C܂

BugFixCherry (ftHg=1)
@0ȊOɂƁA_\oOC܂
@_Now100𒴂ɕ\Ȃ̂CɂȂꍇ1w肵Ă
@ΉQ[FdX

BugFixTh10Power3 (ftHg=0)
@0ȊOɂƁA_^̊ђʑ̃p[3Ԃł̍ړ̃Vbg
@ُȍU͂ɂȂoOC܂
@oOCƂ͌ĂAVbg̈З͂122̏ꍇA12ɕ␳Ƃsł
@BAP3AԁAẼCVbg̈З͂12ɕ␳鏈ł͂Ȃ̂ŁA
@ƁA։e邩܂
@\ӂĂgp
@BugFixTh10Power3=1ɂĕۑvĆA
@vCĐ鑤łBugFixTh10Power3=1ɂčĐKv܂
@pingval̂͂ɂApower3oOCsƂł܂
@肪Ƃ܂

ProcessPriority (ftHg=0)
@̍ڂ͏iniɂ݂͑܂@蓮ŒǉĂ
@Q[̃vZX̗Dxw肵܂
@lF-2:  -1:ʏȉ  0:ʏ  1:ʏȏ  2:

ProcessAffinityMask (ftHg=0)
@̍ڂ͏iniɂ݂͑܂@蓮ŒǉĂ
@ǂCPUŃvZXs邩𐧌ł܂
@1:CPU0ł̂ݎs
@2:CPU1ł̂ݎs
@3:CPU0CPU1Ŏs
@erbg̓vZX̃XbhsłvZbT\܂
@ProcessAffinityMask10iŎw肵Ă

LockBackBuffer (ftHg=0)
@̍ڂ͏iniɂ݂͑܂@蓮ŒǉĂ
@vsyncɂłȂꍇɁA1ɂĂ
@1ɂƁAPresentOɃobNobt@bNAׂĂDirect3D`施߂̊ҋ@܂
@ʏ1ɂKv͂܂
@0ŃeBAOł́A1ɂ邱ƂŐvsyncs悤ɂȂ邩܂
@pŁÂׂʂfpsɒ[ɗ\܂(XyJ[h)


艺ɏĂ镶͂́Aʂ̕ɂ͕Kv̂Ȃł
pb`ǂ̂悤ɓ삵Ă̂A
܂AWindowsAPI̎dlEɂďĂ܂
̂Ȃ͓ǂݔ΂ĂĂ܂܂



Zp
{pb`łǂ̂悤ȓ邩Ă܂
ׂẴpb`͉L̗lɓ삵܂
E{ƂtimeBeginPeriod()timeEndPeriod()̌ĂяoׂĖ܂
EAvNtimeBeginPeriod(1)sAAvItimeEndPeriod(1)s悤ɂ܂
EIDirect3D::CreateDevice()Ăяoۂ̈A
@D3DPRESENT_PARAMETERSD3DSWAPEFFECTAD3DSWAPEFFECT_DISCARDɋݒ肵܂
@܂ADirectX9̏ꍇAPresentationIntervaloϐD3DPRESENT_INTERVAL_IMMEDIATEݒ肵܂
E{Ƃ̏ł́A`Jn̏ꍇSleep(0)ĂяoAWindowMsg։xт܂A
@{pb`ł́A`Jn菈HookA`Jn܂łSetWaitableTimer()gAҋ@悤ɂ܂
@WindowMsg1t[1񂵂sȂ悤ɂ܂
Eʂ\ʂւ̓](IDirect3DDevice::Present())HookAvsync҂̏s悤ɂ܂
E̗͉L̒ʂł
@WindowMsg  `Jn܂Wait  ʂ֕`  \ʂ֓](Present)  WindowMsg
E݂FPS\邽߂fpsvŹAPresentɌvZ܂({Ƃł͗ʕ`撆̎)
@PresentƂ̂́APresentĂяoO̎ł
@Present̎fpsZoƁAPresent̂̏Ԃł͖ꍇfpsُɗꍇ܂
@(FrapsDxtorẙO\tgɂAPresenthookꍇ)
@L̗RɂAfpsvZɂ́APresentĂяoO̎gp܂
@An[hEFAvsynconɂꍇADirectX9window[h́APresentcallƓsleep邽
@Present̎fpsZoKv邩܂
EdXFPS\̂́A
@QueryPerformanceCounter()œl̉32bit̒l݂̂gĉZ邽߂ɋN܂
@QueryPerformanceCounter()ŕԂlُɑ傫FPS\Ǝv܂
@fARA̏ꍇAQueryPerformanceCounter()ŕԂlRDTSC(Time Stamp Counter)̒lɂȂ邽߁A
@Ȃ̂Ǝv܂
@fARApb`𓖂ĂƁAdXłFPS\͒܂A
@QueryPerformanceFrequency()ŕԂlAPower Management TimerɕύX邽߂̂悤ł
@TSCPM^C}̐x̍́A傫̏ꍇ1000{炢Ⴂ܂
@ĹAPCɂ܂̂ŁASĂ̊ɂ͓Ă͂܂܂
@http://support.microsoft.com/default.aspx?scid=kb;ja;327809
@dXfps\̗́Aboot.ini/usepmtimerw肷邾ŏCłƎv܂
E_^Window[hAȂ50fpsȉɂȂ邱Ƃɂāc
@PresentationIntervaloϐD3DPRESENT_INTERVAL_DEFAULTw肳Ă邽߁A
@悤ɂȂ܂
@̐Direct3DSleep()gĎĂ܂
@_^łtimeBeginPeriod()ĂяoĂȂ߁ASleep̐x10`15msxɂȂĂ܂
@܂łAєтɂȂĂ܂߁A60fpsێłȂȂĂ܂̂Ǝv܂
E{pb`̐ɂ́AIDirect3DDevice::GetRasterStatus()gpĂ܂A
@InVBlankoϐVBlank𔻒fĂ̂ł͂ȂA
@ScanLineoϐāAVBlank̎vZA
@̎܂ő҂ĂPresent()悤ɂĂ܂
@ɂẮAInVBlank͂悭ǂݔ΂C܂

timeBeginPeriod
timeBeginPeriod()ĂяoƁASleep()WaitForSingleObject()̐xς܂
timeGetTime()Sleep()̐xςȂƎvAԈႢ̂悤ł
SetWaitableTimer()WaitForSingleObject()gA100imbPʂ̐x
ҋ@ꍇ́AKtimeBeginPeriod(1)ĂԕKv悤ł
timeBeginPeriod(1)Ă΂ȂԂWaitForSingleObject()̐x1msȉ̊
炭WMP̃AvłtimeBeginPeriod(1)Ăł邽߂
xȂĂƎv܂

MSDNCutimeBeginPeriod()̉
@^C}T[rX̎gpOɂ̊֐ĂяoA
@^C}T[rX̎gpIソ timeEndPeriod ֐ĂяoĂB
ƏĂ܂
Lۂ݂ɂĂ̂܂܎Ă܂ƁA
timeGetTime()ĂяoтtimeBeginPeriod(),timeEndPeriod()
ĂԕKv悤ɕ܂c
Rł@MSDN㩂ł@Ⴞ߂ł@ZUN
timeBeginPeriod()ĂяoĂɂ͐xςȂA
኱̊ԂKvƂƂ܂
timeBeginPeriod()̓AvNɁA
timeEndPeriod()̓AvIɌĂяôǂ炵ł

LWindowsXP2000̘bł
VistȁꍇAvSetMmThreadCharacteristicsƂ֐܂
ڍׂgoogleMSDNCuŒׂĂ
timeBeginPeriodƓʂ܂


SetWaitableTimerWaitForSingleObject̐xɂ
1.4GHz̃VORACPUPC̏ꍇɂāA1~b̐xmF܂
炭̂悤ȊłSleepType=0łSȂƎv܂
2.6GHz̃fARACPUPC̏ꍇAx1~bPʂɂȂ܂
1.5~bw肵Ă2~bxSleepĂ܂܂
łȂ̂͂킩܂񂪁A
SetWaitableTimerWaitForSingleObject̐x́A
ɂăooŐMpłȂ݂ł

double^̐xɂ
QueryPerformanceCounterœldoubleɕϊāA
doublefpsyfps\̂߂̌vZsƁAfpsӂ悤ɂȂ܂
doubleł͂ȂāA64bit̐^(LONGLONG)ŉZ
SӂȂȂ܂
FX킯ł͂܂񂪁Adouble^̐xƂv܂
(邢double̐x𒴂鉉ZĂ\邩c)
(Z@ƂƂ͂Ԃ񖳂Ǝv܂BLONGLONG̏ꍇƓZ@fpsӂ̂)
͂ł邾AQueryPerformanceCounterœl
̂܂LONGLONGŕێǂƎv܂

x86CPȔꍇA[JϐgpĉZꍇ́A
float,doublě^Ɋ֌WȂfpuWX^80bit̐xŉZ܂A
float,double^̓ɕۑ邾Œlۂ߂Ax悤ł
ɃO[oϐEoϐŕۑEANZXꍇɖ肪ł悤ł
ǔvZxvŃOOƁAǂ܂

IDirect3D::CreateDevice() callہA
BehaviorFlagsɁAD3DCREATE_FPU_PRESERVEw肵Ȃ
̌vZxPxɐݒ肳܂
Gamedouble^̕ϐgpꍇ́AKD3DCREATE_FPU_PRESERVEw肷Kv܂
Pxɐݒ肳̂̓CXbh(CreateDevicecallXbh)ł
ȊÕXbhł͋K̔{xŉZł܂
(ʃXbhDirect3D֘Å֐callꍇɂĂ͖mF)


gEdXEi鏴̓͒xɂ
gƗdX́At[[gsĂꏊ߂ɁA
1t[̕`x܂
̗͈ȉ̒ʂł
WindowMsg  IDirect3DDevice8::BeginScene()  Xgɓo^ꂽ`𗠉ʂɕ` 
IDirect3DDevice8::EndScene()  ݂key͏擾  Lړ̏sA`Xgɓo^ 
̃t[`掞܂ő҂(t[[g)  IDirect3DDevice8::Present()  WindowMsg

dX́AL̕`xɒǉŁA1t[̒x܂
̗͈ȉ̒ʂł (key͏ƃLړ݂̂\L)
@@݂key͏擾AϐAɑ  ϐBQƂāALړ̏s  ϐBɕϐA
܂A1t[O̓͂ĂƂƂł
dX͕`xƓ͒x킹2t[̒x܂

i鏴́AdXƓ͒x1t[܂
t[[g͐Ȃ߁A`x͂܂

L̒xCƂɂA啝ɕ`抮҂ԂȂȂ܂
܂ł60fpsێĂꍇłÂׂʂfps\܂
ɒᐫ\PCŁǍۂ݉\ł


naɂ
C_́A͂̃CeVF""""݂̂ł
iniڂCalcFPS1ɂꍇ́A2dɎľܓĂ镔C܂
sprintfɓnl0.05𑫂Ă̂AȂ悤ɂ܂
iniڂVsync̐ݒ͖܂
iniڂReplaySkipFPS̐ݒ͖܂
iniڂReplaySlowFPS̐ݒ͖܂
nacustom.exeɂāA͂̃CeVɂVsync=1A
͂̃CeVɂVsync=0ƂGame삵܂
iniVsync=2ɂĂꍇ́A͂̃CeVɂVsync=2Ƃē삵܂
͂̃CeVFƒʏɂẮAX̓̂܂܂ł


@Dɂ
C_́A͂̃CeVF""""݂̂ł
iniڂCalcFPS1ɂꍇ́AXyjԂmȎԂɏC܂
iniڂCalcFPS1ɂꍇ́A2dɎľܓĂ镔C܂
sprintfɓnl0.05𑫂Ă̂AȂ悤ɂ܂
iniڂVsync̐ݒ͖܂
iniڂReplaySkipFPS̐ݒ͖܂
@Dcustom.exeɂāA͂̃CeVɂVsync=1A
͂̃CeVɂVsync=0ƂGame삵܂
iniVsync=2ɂĂꍇ́A͂̃CeVɂVsync=2Ƃē삵܂
͂̃CeVFƒʏɂẮAX̓̂܂܂ł



version
2008/04/01 rev1
@J

2008/04/11 rev2
@EGetRasterStatusœScanLinelAj^̍̒l𒴂Ă܂
@@dlO̓ɑΉ  c[X2 >>208thx
@@Vsync=1ɂƕsɃnOAbv錻ۂ邩
@E̓ǂݎT|[gĂ邩ǂ̒̕@ύX
@@ScanLinelϓĂ邩܂
@Ȇxv@ύX
@@Vsync=1ɂGameNCPU100%Ōł܂錻ۂ邩
@@ƎvǁACPU100%Ōł܂錻ۂ͎dlO̒lfGetRasterStatus݂̖Ȃ̂
@EiniڒǉFAskWindowMode(_^E͌X@\ȂߔΉ)
@@c[X2 >>208thx
@EZpǉFdouble^̐xɂ
@E_^EReplaySlowFPSΉ
@@Ԓ́AvCtOȂߖΉ
@EgFPSύX
@E`Ԋu𖈉ȊOɂƔ{錏łAGameɂĂ
@@vsync=1ɂƔ{悤ł(vsync=0ł{Game)
@@`Ԋu:AȊȎΉ͏ł@\ȂłdlƂƂł肢܂

2008/04/12 rev3
@EgFtXN[AfoCXvsynconɂȂĂ̂offɏC
@@܂AtXN[pFPS䏈(60frame)skip悤ɕύX
@@tXNA炭͒xĂƎv܂@̏Cœ͒xȂȂ܂
@@tXNAvCĐłȂ̂܂
@@tXNAFPSGamełȂ̂܂

2009/03/01 rev4
@EgF1t[̓͒x
@EdXF2t[̓͒x
@Ei鏴F1t[̓͒x
@EgdXFAlwaysBlt=1̎̋ύX
@@Q[Window̃tH[JX͂ꍇɁA
@@L[͂ςȂɂȂ錻ۓC邽߂
@@͏R[hC悤ɂ܂
@@GameNɃL[ςȂɂȂ錻ۂCłƎv܂
@@̕ύXɂAiniNoKeyboard̍ڂ͕KvȂȂ܂
@EnaɑΉ
@Einiڍ폜FNoKeyboard
@Einiڍ폜FBltFineTuneTime
@EiniڒǉFAutoBltPrepareTime
@EiniڒǉFSleepType
@EiniڒǉFLockBackBuffer
@EiniڍXVFVsync
@EZpǉFgEdXEi鏴̓͒xɂ
@EZpǉFnaɂ
@Exێł悤ɊevZEASYύX
@Ȇxv@ύX
@@ǂݔ΂\ŏɌ炵܂
@@xvɎsꍇFPSȂĂ̂܂
@Evsync̕@ύX
@@VBlank𐳊mɎZoł悤ɂ܂
@@tbV[gQƂɁÂ݂ĎVBlankZo܂
@@tbV[gƑ̑xĂȂŁA
@@FPSs肾̂܂

2009/09/13 rev5
@Erev́A@D݂̂̃[Xł
@@@DȊOvpatch̃[X͂΂炭ɂȂ肻ł
@EiniڒǉFBugFixGetDeviceState
@@ftHgŃL[̖͂\CR[hKp܂
@@KpĂȂ\ꍇ́A񍐂ĒƂ肪ł
@EiniڒǉFAllowShortDelay
@@rev4ɂāAvsync=1̎̂AllowShortDelay̋@\ɓKpĂ̂Arev5̓ftHgoffɂ܂
@@rev5ł́AAllowShortDelay=1ɂꍇ́Avsync offɂKp܂
@@Ȃ̕ύXŁAvsync=1ɂĂꍇAσt[[grev4ቺ\܂
@@rev4Ɠꍇ́AAllowShortDelay=1ɂĂ
@EiniڍXVFAutoBltPrepareTime
@@Zo@
@@AutoBltPrepareTime̒lAZolɉZ悤ɕύX
@Evsync=0̎ɁAÕt[`ɎԂ߂ꍇɁA
@@̕`^C~OȂ肷ĂoOC
@E}`vZbT̊ɂāAQueryPerformanceCounter
@@^C}\[XrdtscgpAAXPSP3̏ꍇ́A
@@gpvZbT1Ɍ肷悤ɕύX
@EZpǉF@Dɂ



swmpLV/75E
